package com.gdufe.firesafe.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.gdufe.firesafe.model.dto.InspectionDTO;
import com.gdufe.firesafe.model.entity.InspectionEntity;
import com.gdufe.firesafe.model.vo.InspectionStatisticsVO;
import com.gdufe.firesafe.utils.PageUtils;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 安全检查记录表
 *
 * @author Liu
 * @email
 * @date 2024-03-26 16:34:06
 */
public interface InspectionService extends IService<InspectionEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 根据房屋id获取房屋的本月检查次数
     * @param houseId
     * @return
     */
    Integer getHouseCountThisMonth(Integer houseId);

    /**
     * 根据检查员id获取检查员的本月检查次数
     * @param houseId
     * @return
     */
    Integer getInspectorCountThisMonth(Integer houseId);

    /**
     * 获取最近7次检查的日期
     * @param houseId
     * @return
     */
    List<Date> get7Dates(Integer houseId);

    /**
     * 获取最近7次检查的分数
     * @param houseId
     * @return
     */
    List<Double> get7Points(Integer houseId);

    /**
     * 由房屋id列表计算近七次检查的平均分列表
     * @param houseIds
     * @return
     */
    List<Double> getAvgScoresByHouseIds(List<Integer> houseIds);

    /**
     * 获取检查员统计页数据
     * @param inspectorId
     * @return
     */
    InspectionStatisticsVO getInspectionStatistics(Integer inspectorId);

    /**
     * 根据检查员id获取其总检查次数
     * @param inspectorId
     * @return
     */
    Integer getCountByInspectorId(Integer inspectorId);

    /**
     * 该检查员每月的检查次数
     * @param inspectorId
     * @return
     */
    List<Integer> getCountPerMonth(Integer inspectorId);

    /**
     * 该检查员每月的平均分
     * @param inspectorId
     * @return
     */
    List<Double> getAvgScoresPerMonth(Integer inspectorId);

    /**
     * 上传检查记录
     * @param inspectionDTO
     * @param inspectorId
     */
    void uploadInspection(InspectionDTO inspectionDTO, Integer inspectorId);

    /**
     * 获取当前检查员或业主检查记录
     * @param params
     * @return
     */
    PageUtils getCurrentUserInspection(Map<String, Object> params);

    /**
     * 根据当前业主最新的安全检查，提供AI建议
     * @return
     */
    SseEmitter getOwnerAISuggestion(Integer inspectionId);

//    /**
//     * 获取业主房屋对应的检查记录
//     * @return
//     */
//    List<InspectionEntity> getOwnerInspection();
}

